﻿using Sino.CapacityCloud.Services;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Sino.CapacityCloud.Repositories.Models;
using Microsoft.Extensions.Caching.Distributed;
using Newtonsoft.Json;
using System.IO;
using System.Text;
using Sino.Tms.Primitives;
using Sino.Tms.WebApi.Framework.Client;
using Sino.Tms.WebApi.Framework.Primitives;
using Sino.WebApi.Framework.Client;
using System.Net.Http;

namespace Sino.CapacityCloud.Tests.Mocks
{

    public class FakeTmsServiceBus
        : ITmsServiceBus
    {

        public event EventHandler<TokenBasedClientErrorEventArgs> Error;
        public event EventHandler<HttpResponseMessage> ResponseArrived;

        private readonly IDistributedCache _cache;

        public FakeTmsServiceBus(IDistributedCache cache)
        {
            this._cache = cache;
        }

        event EventHandler<TokenBasedClientErrorEventArgs> ITokenBasedWebApiClient.Error
        {
            add
            {
                throw new NotImplementedException();
            }

            remove
            {
                throw new NotImplementedException();
            }
        }

        public void CancelPendingRequests()
        {
            throw new NotImplementedException();
        }

        public Task<OutputVmResponse<OutputVM>> ConfirmDeliveredAsync(string carrierOrderId, string smsCode)
        {
            throw new NotImplementedException();
        }

        public Task<OutputVmResponse<PageVM<OrderChildLineItemVM>>> GetAttachmentListAsync(string carrierOrderId)
        {
            throw new NotImplementedException();
        }

        public Task<OutputVmResponse<PageVM<OrderListItemVM>>> GetCarrierOrderDetailsAsync(string carrierorderid)
        {
            throw new NotImplementedException();
        }

        public Task<OutputVmResponse<PageVM<PageVM<OrderListItemVM>>>> GetCarrierOrdersAsync(string carCode, int skip = 0, int count = -1)
        {
            throw new NotImplementedException();
        }

        public Task<IEnumerable<ConfirmedOrder>> GetCarrierSubOrdersAsync(string carrierOrderId)
        {
            throw new NotImplementedException();
        }

        public Task<OutputVmResponse<PageVM<ConsigneeListItemVM>>> GetConsigneeListAsync(string carrierOrderId)
        {
            throw new NotImplementedException();
        }

        public Task<OutputVmResponse<PageVM<OrderListItemVM>>> GetGrabbedOrdersAsync(IEnumerable<string> orderIds, string shipaddress = null, string deliveraddress = null, DateTime? shipstarttime = default(DateTime?), DateTime? shipendtime = default(DateTime?), int skip = 0, int count = -1)
        {
            throw new NotImplementedException();
        }

        public Task<PageVM<Order>> GetMyInvolvedOrdersAsync(IEnumerable<string> orderIds, string shipaddress = null, string deliveraddress = null, DateTime? shipstarttime = default(DateTime?), DateTime? shipendtime = default(DateTime?), int skip = 0, int count = -1)
        {
            throw new NotImplementedException();
        }

        public Task<PageVM<ConfirmedOrder>> GetMyOrdersAsync(string userId, string carCode, int skip = 0, int count = -1)
        {
            throw new NotImplementedException();
        }

        public Task<PageVM<Order>> GetOrdersAsync(string shipcode = null, string delivercode = null, DateTime? shipstarttime = default(DateTime?), DateTime? shipendtime = default(DateTime?), int skip = 0, int count = -1)
        {
            throw new NotImplementedException();
        }

        public Task<OutputVmResponse<PageVM<OrderListItemVM>>> GetOrdersAsync(string shipaddress = null, string deliveraddress = null, string shipcode = null, string delivercode = null, DateTime? shipstarttime = default(DateTime?), DateTime? shipendtime = default(DateTime?), int skip = 0, int count = -1)
        {
            throw new NotImplementedException();
        }

        public Task<OutputVmResponse<GetPaymentVM>> GetPaymentDetialAsync(string feeSettleBillId)
        {
            throw new NotImplementedException();
        }

        public Task<OutputVmResponse<OutputVM>> GetSmsCodeAsync(string carrierorderid, string phoneNumber)
        {
            throw new NotImplementedException();
        }

        public Task<OutputVmResponse<UserDetailVM>> GetUserInfoAsync(string id)
        {
            throw new NotImplementedException();
        }

        public Task<OutputVmResponse<PageVM<EvaluateListItemVM>>> QueryEvaluationsAsync(string carrierorderid, string carcode)
        {
            throw new NotImplementedException();
        }

        public Task<OutputVmResponse<PageVM<FeeListItemVM>>> QueryFeesAsync(string carrierorderid, string carcode)
        {
            throw new NotImplementedException();
        }

        public Task<IEnumerable<PayableCost>> QueryPayableCostsAsync(string carriedOrderId, string carId, string userId)
        {
            throw new NotImplementedException();
        }

        public Task<IEnumerable<RatingRecord>> QueryRatingRecordsAsync(string carriedOrderId, string orderId, string carId, string userId)
        {
            throw new NotImplementedException();
        }

        public Task<OutputVmResponse<OutputVM>> ReturnToTransactAsync(string feeSettleBillId)
        {
            throw new NotImplementedException();
        }

        public Task<OutputVmResponse<CheckPaymentVM>> StartEbankPaymentAsync(string feeSettleBillId)
        {
            throw new NotImplementedException();
        }

        public Task<ConfirmedOrder> GetMyOrderDetailsAsync(string carrierOrderId)
        {
            throw new NotImplementedException();
        }

        public Task<OutputVmResponse<UploadVM>> UploadReceiptAsync(string subOrderId, string fileName, Stream content)
        {
            throw new NotImplementedException();
        }

        public Task<OutputVmResponse<UploadVM>> AddReceiptAsync(string subOrderId, string fileName, string url)
        {
            throw new NotImplementedException();
        }

        public Task<OutputVmResponse<OrderListItemVM>> GetOrderDetailsAsync(string orderId)
        {
            throw new NotImplementedException();
        }

    }

}